package savet.entidades;

import java.io.Serializable;
import java.util.Date;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import org.openswing.swing.message.receive.java.ValueObject;
import savet.entidades.atributos.ASOS;
import savet.entidades.atributos.Atributo;
import savet.entidades.atributos.CAGED;
import savet.entidades.atributos.Ferias;
import savet.entidades.atributos.LRE;
import savet.entidades.atributos.Rais;
import savet.entidades.atributos.Rescisao;
import savet.entidades.atributos.Salario;

/**
 *
 * @author rafael
 */
@Entity
@Table
public class Trabalhador implements ValueObject, Serializable, Comparable<Trabalhador> {

    public static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String nome;
    private String pis;
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date admissao;
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date afastamento;
    private String codAfastamento;
    private boolean aprendiz;
    private String genero;
    @OneToOne
    private Atributo ctps;
    @OneToOne
    private LRE livro;
    @OneToOne
    private Ferias ferias;
    @OneToOne
    private CAGED caged;
    @OneToOne
    private Rais rais;
    @OneToOne
    private Rescisao rescisao;

    @OneToOne
    private ASOS examMed;

    @OneToOne
    private Salario salario;

    public Trabalhador() {
    }

    public Trabalhador(String nome, String pis, Date admissao, Date afastamento, String codAfastamento, boolean aprendiz, String genero) {
        this.nome = nome;
        this.pis = pis;
        this.admissao = admissao;
        this.afastamento = afastamento;
        this.codAfastamento = codAfastamento;
        this.aprendiz = aprendiz;
        this.genero = genero;
    }

    public Atributo getCtps() {
        return ctps;
    }

    public void setCtps(Atributo ctps) {
        this.ctps = ctps;
    }

    public LRE getLivro() {
        return livro;
    }

    public void setLivro(LRE livro) {
        this.livro = livro;
    }

    public Date getAdmissao() {
        return admissao;
    }

    public void setAdmissao(Date adminissao) {
        this.admissao = adminissao;
    }

    public Date getAfastamento() {
        return afastamento;
    }

    public void setAfastamento(Date afastamento) {
        this.afastamento = afastamento;
    }

    public boolean isAprendiz() {
        return aprendiz;
    }

    public void setAprendiz(boolean aprendiz) {
        this.aprendiz = aprendiz;
    }

    public String getCodAfastamento() {
        return codAfastamento;
    }

    public void setCodAfastamento(String codAfastamento) {
        this.codAfastamento = codAfastamento;
    }

    public String getGenero() {
        return genero;
    }

    public void setGenero(String genero) {
        this.genero = genero;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getPis() {
        return pis;
    }

    public void setPis(String pis) {
        this.pis = pis;
    }

    public Ferias getFerias() {
        return ferias;
    }

    public void setFerias(Ferias ferias) {
        this.ferias = ferias;
    }

    public CAGED getCaged() {
        return caged;
    }

    public void setCaged(CAGED caged) {
        this.caged = caged;
    }

    public Rais getRais() {
        return rais;
    }

    public void setRais(Rais rais) {
        this.rais = rais;
    }

    public Rescisao getRescisao() {
        return rescisao;
    }

    public void setRescisao(Rescisao rescisao) {
        this.rescisao = rescisao;
    }

    public ASOS getExamMed() {
        return examMed;
    }

    public void setExamMed(ASOS examMed) {
        this.examMed = examMed;
    }

 

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Trabalhador other = (Trabalhador) obj;
        if ((this.pis == null) ? (other.pis != null) : !this.pis.equals(other.pis)) {
            return false;
        }
        return true;
    }

    @Override
    public int hashCode() {
        int hash = 3;
        hash = 19 * hash + (this.pis != null ? this.pis.hashCode() : 0);
        return hash;
    }

    @Override
    public String toString() {
//        return livro.getPagina() + "";
        return livro.getEstado() != Atributo.NAO_SE_APLICA ? "Alterado" : "Nao alterado";
//        return "Trabalhador{" + "nome=" + nome + "pis=" + pis + "adminissao=" + admissao + "afastamento=" + afastamento + "codAfastamento=" + codAfastamento + "aprendiz=" + aprendiz + "genero=" + genero + '}';
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Salario getSalario() {
        return salario;
    }

    public void setSalario(Salario salario) {
        this.salario = salario;
    }

    public int compareTo(Trabalhador o) {
        return nome.compareTo(o.nome);
    }

    @Override
    public Object clone() throws CloneNotSupportedException {
        return super.clone();
    }

}
